//#pragma once
#ifndef VLAREIMPL_H
#define VLAREIMPL_H

#ifndef NOSTDAFX
#include "StdAfx.h"
#endif

#include "Vlare.h"
#include "Visualizer.h"
#include "Element.h"

class VlareImpl :
	public Vlare
{
	//friend Vlare::Element;
	Visualizer *pViz;
	Element	*pRoot;
public:
	VlareImpl(void);
	virtual ~VlareImpl(void);

	virtual void Init(VlareHashMap properties);
	virtual void AcquireResources();
	virtual void FreeResources();
	virtual void Free();

	virtual void RunFrame();

	virtual Element* AddElement(Element *const pParent, ElementMemberMap props);
	virtual Element *const GetRoot();
	virtual void BringToFront(const Element*);
	virtual void DeleteElement(const Element*);

	virtual DynamicData::VLARE_TYPE IsHook(const char *const szFunction);
	virtual DynamicData GetHook(Element *pElem, const char *const szName, DynamicData *params);

	virtual void SetHook(Element *const pElem, const char *const szName, DynamicData val, bool bCacheValueForFrame);
	virtual void UnsetHook(Element *const pElem, const char *const szName, DynamicData val);

};
#endif
